// Variables para el manejo de hojas
var hojaPrincipal = "Hoja 1";

var ss = SpreadsheetApp.getActiveSpreadsheet();

var hoja = ss.getSheetByName(hojaPrincipal);

// Variables obtenidas de funciones por return
var e_number;

// función para manejar las solicitudes HTTP POST entrantes. Cuando se recibe una solicitud POST, llama a la función handleRepose y le pasa el objeto de solicitud e.

function doPost(e){

  return handleRepose(e) ;

}


  // Código para crear o obtener una hoja llamada '_Logs'
function crearHojaLogs() {

  // se crea una variable para la hoja de errores, elcódigo comprueba si la hoja ya existe, y si no la inserta.
  var sheet_log = ss.getSheetByName('_Logs');
  if (!sheet_log) {
    ss.insertSheet('_Logs');
    sheet_log = ss.getSheetByName('_Logs');
  }
  // Registramos el número de ejecuciones
  if (sheet_log.getRange('A1').isBlank()) {
    sheet_log.getRange('A1').setValue(1);

   // actualiza el recuento de ejecuciones en la celda A1 de la hoja '_Logs'sumandole 1
  } else {
    sheet_log.getRange('A1').setValue(sheet_log.getRange('A1').getValue() + 1);
  }

  // Devuelve el número de ejecución y lo almacena en la variable e_number
  e_number = sheet_log.getRange('A1').getValue();
  return e_number;
}

function handleRepose(e) {
  crearHojaLogs(); // Llamamos la función que crea la hoja de logs

  try {
    // Verificar si la cabecera ya está creada, si no, la creamos
    if (hoja.getRange('A1').isBlank()) {
      var h_row = ["cen", "fecha-hora", "nombre", "Humedad Relativa %", "Temperatura ºC"];
      hoja.getRange(1, 1, 1, h_row.length).setValues([h_row]);
    }

    // Parseamos el JSON recibido
    var jsonData = JSON.parse(e.postData.contents);

    // Extraer datos del JSON
    var deviceId = jsonData.end_device_ids.device_id;


    // Variables para los valores de temperatura y humedad
    var temperatura = '';
    var humedad = '';

    // Buscar temperatura y humedad en la lista de mensajes
    var messages = jsonData.uplink_message.decoded_payload.messages;
    if (messages && Array.isArray(messages)) {
      messages.forEach(msg => {
        if (msg.measurementId === 4097) {
          temperatura = msg.measurementValue.toString().replace('.', ',');
        }
        if (msg.measurementId === 4098) {
          humedad = msg.measurementValue.toString().replace('.', ',');
        }
      });
    }

    // Crear la fila de datos
    var row = [e_number, new Date(), deviceId, humedad, temperatura];

    // Insertar la fila en la hoja de cálculo
    hoja.appendRow(row);

  } catch (err) {
    // Guardar errores en la hoja de logs
    var sheet_log = ss.getSheetByName('_Logs');
    sheet_log.appendRow([e_number, err.message]);
  }
}